package com.ssy.lingxi.pay.service;

import com.ssy.lingxi.pay.model.dto.ParameterCacheDTO;

import java.util.List;

/**
 * 订单缓存接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-08-20
 */
public interface IPayCacheService {
    /**
     * 生成随机字符串
     * @return 随机字符串
     */
    String randomString();

    /**
     * Json序列化对象
     * @param obj 对象
     * @return Json字符串
     */
    String serializeObject(Object obj);

    /**
     * 反序列化对象
     * @param json Json字符串
     * @param tClass 反序列化对象的Class
     * @param <T> 对象类型
     * @return 对象
     */
    <T> T deserializeObject(String json, Class<T> tClass);

    /**
     * 生成微信支付参数缓存列表
     * @param merchantId 微信商户号
     * @param appId      AppId
     * @param apiKey     ApiKey
     * @return 缓存参数列表
     */
    List<ParameterCacheDTO> generateWeChatPayParameters(String merchantId, String appId, String apiKey);

    /**
     * 缓存微信支付参数
     * @param memberId 会员Id
     * @param roleId   角色Id
     * @param payType  支付类型
     * @param nonce  随机字符串
     * @param merchantId 微信商户号
     * @param appId      AppId
     * @param apiKey     ApiKey
     */
    void cacheWeChatPayParameters(Long memberId, Long roleId, Integer payType, String nonce, String merchantId, String appId, String apiKey);

    /**
     * 缓存订单支付参数
     * @param memberId 会员Id
     * @param roleId   角色Id
     * @param payType  支付类型
     * @param nonce  随机字符串
     * @param parameters 要缓存的支付参数
     */
    void cachePayParameters(Long memberId, Long roleId, Integer payType, String nonce, List<ParameterCacheDTO> parameters);

    /**
     * 查询缓存的订单支付参数
     * @param memberId 会员Id
     * @param roleId 角色Id
     * @param payType 支付类型
     * @param nonce 随机字符串
     * @return 缓存的支付参数
     */
    List<ParameterCacheDTO> findPayParameters(Long memberId, Long roleId, Integer payType, String nonce);

    /**
     * 缓存支付宝支付参数
     * @param memberId 会员Id
     * @param memberRoleId   角色Id
     * @param payType  支付类型
     * @param nonce  随机字符串
     * @param appId      支付宝AppId
     * @param alipayPublicKey 支付宝公钥
     * @param appPrivateKey 支付宝商户私钥
     */
    void cacheAliPayParameters(Long memberId, Long memberRoleId, Integer payType, String nonce, String appId, String alipayPublicKey, String appPrivateKey);



}
